home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 August: Tool Chest / Dev.CD Aug 94.toast / Sample Code / Snippets / Toolbox / BufCallback / BufferPlay.c next >
Encoding:
C/C++ Source or Header  |  1992-07-15  |  5.6 KB  |  242 lines  |  [TEXT/MPS ]

  1. /*______________________________________________________*/
  2. /*                            C Shell                        */
  3. /*                          by                          */
  4. /*                  RICHARD P. COLLYER                  */
  5. /*                       10/14/91                       */
  6. /*______________________________________________________*/
  7.  
  8. #include    <Quickdraw.h>
  9. #include    <Windows.h>
  10. #include    <desk.h>
  11. #include    <Memory.h>
  12. #include    <Menus.h>
  13. #include    <OSEvents.h>
  14. #include    <Resources.h>
  15. #include    <SegLoad.h>
  16. #include    <Sound.h>
  17. #include    <ToolUtils.h>
  18.  
  19. extern _DataInit();
  20.  
  21. #define    TRUE            0xFF
  22. #define    FALSE            0
  23.  
  24. #define    appleID            128            
  25. #define    appleMenu        0
  26. #define    aboutMeCommand    1
  27.  
  28. #define    fileID            129
  29. #define    startCommand    1
  30. #define printCommand    3
  31. #define    quitCommand     5
  32.  
  33. #define    editID            130
  34.  
  35. int                    yieldTime, err;
  36. MenuHandle            mymenu1, mymenu2, mymenu0;
  37. EventRecord         myEvent;
  38. Boolean                DoneFlag;
  39. WindowPtr            whichWindow;
  40. short                GlobalFlag;
  41.     
  42. /*______________________________________________________*/
  43. /*                What ever You want                    */
  44. /*______________________________________________________*/
  45. pascal void CallBack(SndChannelPtr chan, SndCommand cmd)
  46. {
  47.     long    myA5;
  48.     
  49.     myA5 = SetA5 (cmd.param2);
  50.     GlobalFlag = TRUE;
  51.     myA5 = SetA5 (myA5);
  52.     
  53.     return;
  54. }
  55.     
  56. /*______________________________________________________*/
  57. /*                What ever You want                    */
  58. /*______________________________________________________*/
  59. void start()
  60. {
  61.     Handle            Sound;
  62.     SndChannelPtr    chan;
  63.     SndCommand        mycmd;
  64.     
  65.     GlobalFlag = FALSE;
  66.     
  67.     Sound = GetResource ('snd ', 100);
  68.     if (ResError() != noErr || Sound == nil)
  69.         Debugger();
  70.     
  71.     chan = nil;
  72.     err = SndNewChannel (&chan, sampledSynth, initNoInterp + initMono, (SndCallBackProcPtr) CallBack);
  73.     if (err != noErr)
  74.         Debugger();
  75.     
  76.     do {
  77.         mycmd.cmd = bufferCmd;
  78.         mycmd.param1 = 0;
  79.         mycmd.param2 = (long) *Sound;
  80.         err = SndDoCommand (chan, &mycmd, FALSE);
  81.         if (err != noErr)
  82.             Debugger();
  83.         
  84.         mycmd.cmd = callBackCmd;
  85.         mycmd.param1 = 0;
  86.         mycmd.param2 = SetCurrentA5();
  87.         err = SndDoCommand (chan, &mycmd, FALSE);
  88.         if (err != noErr)
  89.             Debugger();
  90.         
  91.         do{
  92.             }while (GlobalFlag == FALSE);
  93.  
  94.         GlobalFlag = FALSE;
  95.  
  96.         } while (!Button());
  97.         
  98.     err = SndDisposeChannel (chan,FALSE);
  99.     if (err != noErr)
  100.         Debugger();
  101.  
  102.     return;
  103. }
  104.  
  105. /*______________________________________________________*/
  106. /*                 About Prog Dialog                    */
  107. /*______________________________________________________*/
  108. void showAboutMeDialog()
  109. {
  110.     return;
  111. }
  112.  
  113. /*______________________________________________________*/
  114. /*                 Do Menu Function                     */
  115. /*______________________________________________________*/
  116. void doCommand(mResult)
  117.     long    mResult;
  118. {
  119.     int                     theMenu, theItem;
  120.     char                    daName[256];
  121.     GrafPtr                 savePort;
  122.  
  123.     theItem = LoWord(mResult);
  124.     theMenu = HiWord(mResult);
  125.     
  126.     switch (theMenu) {
  127. /*______________________________________________________*/
  128. /*                    Do Apple Menu                     */
  129. /*______________________________________________________*/
  130.         case appleID:
  131.             if (theItem == aboutMeCommand)
  132.                 showAboutMeDialog();
  133.             else {
  134.                 GetItem(mymenu0, theItem, daName);
  135.                 GetPort(&savePort);
  136.                 (void) OpenDeskAcc(daName);
  137.                 SetPort(savePort);
  138.             }
  139.             break;
  140. /*______________________________________________________*/
  141. /*                     Do File Menu                     */
  142. /*______________________________________________________*/
  143.         case fileID:
  144.             switch (theItem) {
  145.                 case startCommand:
  146.                     start();
  147.                     break;
  148.                 case printCommand:
  149.                     break;
  150.                 case quitCommand:
  151.                     DoneFlag = TRUE;
  152.                     break;
  153.                 default:
  154.                     break;
  155.                 }
  156.             break;
  157. /*______________________________________________________*/
  158. /*                     Do Edit Menu                     */
  159. /*______________________________________________________*/
  160.         case editID:
  161.             switch (theItem) {
  162.                 default:
  163.                     break;
  164.                 }
  165.             break;
  166.         default:
  167.             break;
  168.         }
  169.     HiliteMenu(0);
  170.     return;
  171. }
  172.  
  173. /*______________________________________________________*/
  174. /*               Initialization traps                   */
  175. /*______________________________________________________*/
  176. void init()
  177. {
  178.     UnloadSeg(_DataInit);
  179.     InitGraf(&qd.thePort);
  180.     FlushEvents(everyEvent, 0);
  181.     InitMenus();
  182.     InitCursor();
  183.     MaxApplZone();
  184. /*______________________________________________________*/
  185. /*                    Set menus                         */
  186. /*______________________________________________________*/
  187.     mymenu0 = GetMenu(appleID);
  188.     AddResMenu(mymenu0, 'DRVR');
  189.     InsertMenu(mymenu0,0);
  190.     mymenu1 = newmenu(129,"File");
  191.     appendmenu(mymenu1,"Start;-;Print;-;Quit");
  192.     InsertMenu(mymenu1,0);
  193.     mymenu2 = newmenu(130,"Edit");
  194.     InsertMenu(mymenu2,0);
  195.     DrawMenuBar();
  196.  
  197. /*______________________________________________________*/
  198. /*                  Init variables                      */
  199. /*______________________________________________________*/
  200.     DoneFlag = FALSE;
  201.     yieldTime = 0;
  202.     return;
  203. }
  204.  
  205. main()
  206. {
  207. /*______________________________________________________*/
  208. /*                   Main Event loop                    */
  209. /*______________________________________________________*/
  210.     init();
  211.     for ( ;; ) {
  212.         if (DoneFlag) {
  213.             ExitToShell();
  214.             }
  215.         if (WaitNextEvent(everyEvent, &myEvent, yieldTime, nil)) {
  216.             switch (myEvent.what) {
  217.                 case mouseDown:
  218.                     switch (FindWindow(myEvent.where, &whichWindow)) {
  219.                         case inSysWindow:
  220.                             SystemClick(&myEvent, whichWindow);
  221.                             break;
  222.                         case inMenuBar:
  223.                             doCommand(MenuSelect(myEvent.where));
  224.                             break;
  225.                         default:
  226.                             break;
  227.                         }
  228.                     break;
  229.                 case app4Evt:
  230.                     if ((myEvent.message << 31) == 0) { /* Suspend */
  231.                         yieldTime = 30;
  232.                         }
  233.                     else { /* Resume */
  234.                         yieldTime = 0;
  235.                         }
  236.                     break;
  237.                 default:
  238.                     break;
  239.                 }
  240.             }
  241.         }
  242. }